package org.afs.gescol.core.service.interfaces;

import java.util.List;

import org.afs.gescol.core.dto.LevelCriteria;
import org.afs.gescol.core.dto.SeriesCriteria;
import org.scub.foundation.framework.base.dto.IdLabelDto;

/**
 * Reference Services.
 * @autor Kobla GBENYO (kobla.gbenyo@gmail.com)
 */
public interface ReferenceServices {

    /**
     * Get school appreciation list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getAppreciationByLabel(String label);

    /**
     * Get school cycle list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getCycleByLabel(String label);

    /**
     * Get school day list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getDayByLabel(String label);

    /**
     * Get school hourly list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getHourlyByLabel(String label);

    /**
     * Get school level list by criteria
     * @param levelCriteria the level search criteria.
     * @return IdLabel list
     */
    List<IdLabelDto> getLevelByCriteria(LevelCriteria levelCriteria);

    /**
     * Get school period list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getPeriodByLabel(String label);

    /**
     * Get school series list by criteria.
     * @param seriesCriteria the series search criteria
     * @return IdLabel list
     */
    List<IdLabelDto> getSeriesByCriteria(SeriesCriteria seriesCriteria);

    /**
     * Get school subject list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getSubjectByLabel(String label);

    /**
     * Get school subject by providing its id.
     * @param id the subject id
     * @return IdLabel the subject
     */
    IdLabelDto getSubjectById(Long id);

    /**
     * Get school tranche payment list by providing its label.
     * @param label the label or its start
     * @return IdLabel list
     */
    List<IdLabelDto> getTranchePaymentByLabel(String label);

    /**
     * Get school class by providing its id.
     * @param id the class id
     * @return IdLabel the class
     */
    IdLabelDto getSchoolClassById(Long id);

    /**
     * Get school teacher by providing its id.
     * @param id the teacher id
     * @return IdLabel the teacher
     */
    IdLabelDto getTeacherById(Long id);
}
